package com.koron.common.core.business.common.service;

import com.koron.common.core.business.common.entity.TOrderNoMax;

/**
 * @author jzp
 * @since 2021/9/22
 */
public interface TOrderNoMaxService {
    /**
     * 根据key和dateFormat获取最大编号，dateFormat为null则使用yyyyMMdd
     * @param key           唯一健，如 XSBZ
     * @param dateFormat    时间格式化，如yyyyMMdd
     * @return maxValue：当前健的最大值，如7，需组合使用
     * 如
     * <code>
     *     String key = "XSBZ";
     *     String dateFormat = "yyyyMMdd";
     *     TOrderNoMax tOrderNoMax = getByKey(key, dateFormat);
     *     String result = key + tOrderNoMax.getDate() + String.format("%03d", tOrderNoMax.getMaxValue())
     *     // XSBZ + 20220202 + 007
     * </code>
     *
     */
    TOrderNoMax getByKey(String key, String dateFormat);

    /**
     * 批量插入时应该要用这个方法
     * 将编号大小增加step个，最终编号为初始编码+step
     * @return 返回最终编号
     * <code>
     *     String key = "XSBZ";
     *     String dateFormat = "yyyyMMdd";
     *     int dataSize = list.size();
     *     TOrderNoMax tOrderNoMax = peekNoMax(key, dateFormat, dataSize);
     *     AtomicInteger atomicInteger = new AtomicInteger(tOrderNoMax.getMaxValue() - dataSize);
     *     list.forEach(data -> {
     *         String code = key + tOrderNoMax.getDate() + String.format("%03d", atomicInteger.getAndIncrement());
     *         data.setCode(code);
     *     });
     * </code>
     */
    TOrderNoMax peekNoMax(String key, String dateFormat, int step);

}
